package br.com.caelum.controller;

import br.com.caelum.dao.GrupoDao;
import br.com.caelum.dao.PermissaoDao;
import br.com.caelum.dao.UsuarioDao;
import br.com.caelum.model.Grupo;
import br.com.caelum.model.Permissao;
import br.com.caelum.model.Usuario;
import br.com.caelum.model.UsuarioWeb;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import java.util.List;

/**
 *
 * @author Rachid
 */
@Resource
public class UsuarioController {

    private UsuarioDao dao;
    private Result result;
    private Validator validator;
    private UsuarioWeb usuarioWeb;

    public UsuarioController(UsuarioDao dao, Result result, Validator validator, UsuarioWeb usuarioWeb) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;
        this.usuarioWeb = usuarioWeb;
    }
    
    public void inicio(){        
    }
   
    public void adiciona(Usuario usuario){
        if(dao.verificaUsuario(usuario)){
            validator.add(new ValidationMessage("Login já existe", "usuario.login"));
        }
        validator.onErrorUsePageOf(this).novo();
        
        dao.salvar(usuario);
        result.redirectTo(this).inicio();
    }

    public void loginForm(){
        
    }

    public void login(Usuario usuario){
        Usuario carregado = dao.buscaUsuario(usuario);
        if (carregado == null){           
            validator.add(new ValidationMessage("Login e/ou senha inválidos", "usuario.login"));
        }
        validator.onErrorUsePageOf(this).loginForm();
        //Grupo grupo = daoGrupo.buscarPorId(carregado.getGrupo().getId());
//        List<Permissao> p = daoPermissao.buscarPorIdGrupo(carregado.getGrupo().getId());               
//        for(int i=0; i < p.size(); i++){
//            System.out.println(p.get(i).getGrupo().getDescricao());  
//            System.out.println(p.get(i).getRecurso().getDescricao());
//        }
       // System.out.println(p.getRecurso());
       // System.out.println(p.getGrupo().getDescricao());
        usuarioWeb.setLogado(carregado);
         //System.out.println(usuarioWeb.getGrupo());
        result.redirectTo(this).inicio();
    }

    public void logout(){
        usuarioWeb.logout();
        result.redirectTo(this).loginForm();
    }

    public void novo(){
    }
}
